# -*- coding: utf-8 *-*
'''
@author: Geraldo Oliveira
@date: 12 de marco de 2013
@obs: 
AlgoTool 

Efectua medicoes aos tempos computacionais necessarios
para ordenacao de listas recorrendo a alguns dos mais
conhecidos algoritmos de ordenacao

Versao 1.0
'''

import sys
import os

from algorithms.insertionsort import InsertionSort
from algorithms.bubblesort import BubbleSort
from algorithms.heapsort import HeapSort
from algorithms.mergesort import MergeSort
from algorithms.quicksort import QuickSort
from algorithms.shellsort import ShellSort

from experiment.experiment import Experiment

sys.setrecursionlimit(20000)

def sair():
	''' 
	Agradecimento final 
	'''
	print "\nObrigado por usar esta aplicacao.\n"

def info():
	''' Apresenta informacao sobre a aplicacao '''
	print "\n************ AlgoTest V1.0 ************"
	print "Estudo da Complexidade Computacional"
	print "com recurso a algoritmos de ordenacao"
	print "IPBeja-ESTIG 2013 - Disciplina de EDA\n"

def main():
	''' 
	Mostra o ecra principal da aplicacao. 
	Permite:
		- seleccao do algoritmo a utilizar;
		- inserir o nome da experiencia
		  para gravacao do ficheiro com os
		  respectivos dados;
		- indicar o numero de repeticoes
		  desejadas.
	'''
	opcoes = ['Sair', 'InsertionSort', 'HeapSort', 'BubbleSort', \
		 	  'MergeSort','QuickSort','ShellSort']
	objectos = [sair, InsertionSort, HeapSort, BubbleSort, \
				MergeSort, QuickSort, ShellSort]
	while True:
		os.system("clear")
		info()
		for i, opcao in enumerate(opcoes):
			print "{0}. {1}".format(i, opcao) #mostra todas as opções
		escolha = int(raw_input('\nSua escolha? '))
		if escolha == 0:
			break
		nome_exp = raw_input("\nNome da experiencia: ")
		num_repeticoes = input("\nNumero de repeticoes: ")
		experiment = Experiment(objectos[escolha], nome_exp, num_repeticoes)
		experiment.runExperience()
	sair()

if __name__ == '__main__':
	main()